package com.ikun.core.plugin.storage.engine;

import com.ikun.core.config.GlobalConfig;
import com.ikun.core.enums.ErrorEnum;
import com.ikun.core.exception.BusinessException;
import com.ikun.core.exception.InternalOperationException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@Slf4j
public class LocalStorage {

    public void saveToStorage(MultipartFile multipartFile, String fileType, String date, String savedName) {

        // 构建当前文件保存路径：文件保存根目录 + 文件类型 + 日期。
        //      eg: 项目根目录下的files文件夹/image/20250809/xxx.jpg
        Path dirPath = Paths.get(GlobalConfig.fileSavePath, fileType, date);

        try {
            Files.createDirectories(dirPath); // 直接创建目录（如果已存在则不操作）
        } catch (IOException e) {
            log.error("创建上传目录失败: {}; 目录: {}", e.getMessage(), dirPath);
            throw new InternalOperationException("创建上传目录失败");
        }


        // 保存文件到磁盘
        try {
            // 方式1
            Path filePath = dirPath.resolve(savedName); // 构建完整文件路径
            multipartFile.transferTo(filePath);
            // 方式2
            // File dest = new File(dirPath.toString(), savedName);
            // multipartFile.transferTo(dest);
        } catch (IOException e) {
            log.error("文件保存失败: {}", e.getMessage());
            throw new BusinessException(ErrorEnum.FILE_UPLOAD_ERROR);
        }

    }
}
